www.gusucode.com > MATLAB+神经网络30个案例分析》程序和数据 > 源程序/案例22 LVQ神经网络的预测——人脸朝向识别/lvq2_train.m
function [w1,w2]=lvq2_train(P,Tc,Num_Compet,lr,maxiter,w1,w2) %% 迭代计算 n=size(P,2); for k=1:maxiter for i=1:n % 计算各个竞争层神经元与当前输入向量的距离 d=zeros(Num_Compet,1); for j=1:Num_Compet d(j)=sqrt(sse(w1(j,:)'-P(:,i))); end % 寻找与当前输入向量距离最小的竞争层神经元标号,记为index1 [min_d1,index1]=min(d); % 计算与index1相连接的输出神经元对应的类别 a1_1=compet(-1*d); n2_1=purelin(w2*a1_1); a2_1=vec2ind(n2_1); % 寻找与当前输入向量距离次小的竞争层神经元标号,记为index2 d(index1)=inf; [min_d2,index2]=min(d); % 计算与index2相连接的输出神经元对应的类别 a1_2=compet(-1*d); n2_2=purelin(w2*a1_2); a2_2=vec2ind(n2_2); % 判断两个竞争层神经元对应的类别是否相等 flag1=isequal(a2_1,a2_2); flag2=min_d1/min_d2>0.6; if ~flag1 && flag2 if isequal(Tc(i),a2_1) w1(index1,:)=w1(index1,:)+lr*(P(:,i)'-w1(index1,:)); w1(index2,:)=w1(index2,:)-lr*(P(:,i)'-w1(index2,:)); else w1(index1,:)=w1(index1,:)-lr*(P(:,i)'-w1(index1,:)); w1(index2,:)=w1(index2,:)+lr*(P(:,i)'-w1(index2,:)); end else w1(index1,:)=w1(index1,:)+lr*(P(:,i)'-w1(index1,:)); end end end